
package mwt.xml.xdbforms.dblayer.query;

import java.util.List;
import mwt.xml.xdbforms.dblayer.query.impl.ProjectionsImpl;
import mwt.xml.xdbforms.dblayer.query.impl.Restriction;
import mwt.xml.xdbforms.dblayer.query.impl.SQLParameter;

/**
 *Interfaccia generica di una singola operazione sql.
* @author Gianfranco Murador, Matteo Ferri, Cristian Castiglia
 */
public abstract class SQLOperation {

    /**
     * ritorna la lista dei parametri di un'operazione
     * @return parmaters 
     */
    public abstract List<SQLParameter> getParameters();

    /**
     * Ritorna un array di valori dell'operazione
     * @return un array di valori
     *
     */
    public abstract Object[] getValues();

    /**
     * Dichiara un nuovo parametro della query,
     * associa un nome di una colonna sql al valore da
     * inserire.
     * Nota: questo metodo e' valido solo per operazioni
     * di INSERT e di UPDATE, non per una SELECT.
     * Per porre dei vicoli sulle tabelle usare le
     * classi Criteria
     * @see Criteria
     * @see Restriction
     * @see ProjectionsImpl
     * @param sqlp nome del parametro sql
     * @param values valore del parametro
     */
    public void declareParameter(SQLParameter sqlp, Object values) {
        throw new UnsupportedOperationException("Not supported operation");

    }

    /**
     * compila la stringa della query
     */
    public abstract void compile();

    /**
     *
     * @deprecated Da rimuovere in release
     * @param values
     */
    public void update(Object[] values) {
    }

    /**
     * Usato solo per le proiezioni sulle colonne
     * ad esempio.
     * Questo metodo non ha implementazione nella classe
     * astratta SQLOperation, e viene sovrescritto solo da SQLUpdate e
     * SQLQuery
     * @param p Oggetto ProjectionsImpl
     * @see ProjectionsImpl
     */
    public void addProjections(Projections p) {
        throw new UnsupportedOperationException("Not supported operation");


    }

    /**
     * Aggiunge dei criteri di selezione
     * in query select e update
     * Questo metodo non e' implementato nella
     * classe astratta SQLOperation, e viene sovrescritto solo
     * nella classe SQLUpdate e SQLQuery
     * @see Criteria
     * @param c Oggetto Criteria
     */
    public void addCriteria(Criteria c) {
        throw new UnsupportedOperationException("Not supported operation");
    }

    /**
     * Ritorna una stringa con i placeholder (?)
     * giusti per il preparatedStatement
     * @return una stringa sql con i placeholder
     */
    @Override
    public abstract String toString();
}

